// reqGetCartList
import {reqGetCartList,reqDeleteCart,reqcheckCart} from '../../api'
// actions: 处理异步，书写业务逻辑
const actions = {
	//这里可以书写业务逻辑，但是不要修改state数据
	//async 是 ES7 才有的与异步操作有关的关键字
	//async 函数执行时，如果遇到 await 就会先暂停执行 ，
	// 等到触发的异步操作完成后，恢复 async 函数的执行并返回解析值。
	async getCartList({commit}){
		let result = await reqGetCartList()
		if(result.code == 200){
			commit('GETCARTLIST',result.data)
			// console.log('异步请求了')
			// console.log(result)
		}
	},
	//删除一个产品
	async deleteCartSkuId({commit},skuId){
		let result = await reqDeleteCart(skuId)
		// console.log(result)
		if(result.code == 200){
			return 'ok'
		}else{
			return Promise.reject(new Error('faile'))
		}
	},
	//改变单个产品选中状态
	async checkCartSkuId({commit},{skuId,isChecked}){
		let result = await reqcheckCart(skuId,isChecked)
		// console.log(result)
		if(result.code == 200){
			return 'ok'
		}else{
			return Promise.reject(new Error('faile'))
		}
	},
	//删除所有选中产品
	deteleCheckedAllCart({dispatch,getters}){
		// console.log(context)
		// console.log(dispatch,getters)
		let PromiseAll = []
		getters.cartList.cartInfoList.forEach((item)=>{
			if(item.isChecked==1){
				let promise = dispatch('deleteCartSkuId',item.skuId)
				PromiseAll.push(promise)
			}
		})
		
		return Promise.all(PromiseAll)
		
	},
	//全选，或者全不选
	updataCheckedAllCart({dispatch,state},isChecked){
		// console.log(isChecked)
		let PromiseAll = []
		// console.log(context)
		state.cartList[0].cartInfoList.forEach((item)=>{
			let promise = dispatch('checkCartSkuId',{skuId:item.skuId,isChecked})
			PromiseAll.push(promise)
		})
		return Promise.all(PromiseAll)
	}
};

// mutations:修改state
const mutations = {
	GETCARTLIST(state,cartList){
		state.cartList = cartList
		// console.log(1111,cartList)
	}
};

//state:存储数据的地方
const state = {
	//这里的数据类型是根据服务器返回的数据类型而定的
	cartList:[]
};

// getters：简化数据
const getters = {
	cartList(state){
		return state.cartList[0]||{}
	}
};

//对外暴露Store实例
export default{
	state,
	mutations,
	actions,
	getters
}
